Migo商城2.0 门户首页大广告位显示(1) 十五

Migo商城2.0 门户首页大广告位显示(1) 十五

操作失误,将之前的稿子搞没了,又得重新敲,坑。。。

来一张效果图:

轮播图的实现

1、 将首页显示的广告都抽象的看作是内容

2、 在后台系统中创建一张内容表

3、 创建一个内容分类表用于区分内容的分类

4、 后台系统对内容表以及分类表进行CRUD

5、 对外提供接口服务

6、 前端系统通过接口获取数据,进行封装,即可实现

首页动态展示分析

1、网页内容可以进行分组

2、组中的每个项目包含一张图片

3、项目包含一个url

4、项目包含一个title

5、项目可能包含价格

6、大组下还可以有小组,小组下还可以再分组。

内容归类:

  1. 需要有内容分组,需要是一个树形结构。
  2. 组下有项目
  • a) 包含图片
  • b) Url
  • c) Title
  • d) 价格

可以使用两个表来保存,

一个是内容分组表:tb_content_category

一个内容项目表。tb_content

于是引出一个概念 内容管理系统(CMS) 具体可以谷歌一下

内容分类管理分析

功能分析:

操作的数据库是tb_content_category,向表中插入数据。

页面:

  1. 初始化树形控件。
  2. 添加节点
  3. 重命名节点
  4. 删除节点

初始化树形控件

如图:

请求的url:/rest/content/category

参数:id,当前节点的id,根据id查询子节点。

返回值:json数据

格式:(api查询所得)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[{    
"id": 1,
"text": "Node 1",
"state": "closed",
"children": [{
"id": 11,
"text": "Node 11"
},{
"id": 12,
"text": "Node 12"
}]
},{
"id": 2,
"text": "Node 2",
"state": "closed"
}]

可以使用EUTreeNode(第一版) 2.0版本是ContentCategory 主要是为省查到结果后重新遍历转换为EUTreeNode,造成性能浪费 具体不同的地方请自行对比

ContentCategory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.migo.pojo;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "tb_content_category")
public class ContentCategory extends BasePojo {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "parent_id")
private Long parentId;

private String name;

private Integer status;

@Column(name = "sort_order")
private Integer sortOrder;

@Column(name = "is_parent")
private Boolean isParent;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public Long getParentId() {
return parentId;
}

public void setParentId(Long parentId) {
this.parentId = parentId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getStatus() {
return status;
}

public void setStatus(Integer status) {
this.status = status;
}

public Integer getSortOrder() {
return sortOrder;
}

public void setSortOrder(Integer sortOrder) {
this.sortOrder = sortOrder;
}

public Boolean getIsParent() {
return isParent;
}

public void setIsParent(Boolean isParent) {
this.isParent = isParent;
}

// 扩展字段,支持EasyUItree的显示,这样就可以避免再写一个第一版中的EasyuiTreeNode类,同时也省了第一版中
//在service中的一系列对easyuiTreeNode的处理
public String getText() {
return getName();
}

public String getState() {
return getIsParent() ? "closed" : "open";
}

}

操作的数据库是tb_content_category,属于单表操作,可以使用通用mapper

1
2
3
4
5
6
7
8
9
10
11
package com.migo.mapper;

import com.migo.pojo.ContentCategory;
import tk.mybatis.mapper.common.Mapper;

/**
* Author 知秋
* Created by kauw on 2016/11/20.
*/
public interface ContentCategoryMapper extends Mapper<ContentCategory> {
}

Service层

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.migo.service;

import com.migo.pojo.ContentCategory;
import org.springframework.stereotype.Service;

/**
* Author 知秋
* Created by kauw on 2016/11/20.
*/
@Service
public class ContentCategoryService extends BaseService<ContentCategory>{

}

controller层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.migo.controller;

import com.migo.pojo.ContentCategory;
import com.migo.service.ContentCategoryService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
* Author 知秋
* Created by kauw on 2016/11/20.
*/
@Controller
@RequestMapping("content/category")
public class ContentCategoryController {
private static final Logger logger= LoggerFactory.getLogger(ContentCategoryController.class);
@Autowired
private ContentCategoryService contentCategoryService;


/**
* 根据父节点id查询节点列表
* @param parentId
* @return
*/
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<List<ContentCategory>> getContentCatList(
@RequestParam(value = "id", defaultValue = "0") Long parentId) {

try {
if (logger.isInfoEnabled()){
logger.info("根据父节点id查询节点列表 parentId = {}",parentId);
}
ContentCategory example=new ContentCategory();
example.setParentId(parentId);
List<ContentCategory> categoryList = this.contentCategoryService.queryListByWhere(example);
if (categoryList==null||categoryList.isEmpty()){
if (logger.isInfoEnabled()){
logger.info("根据父节点id查询节点列表 未找到 parentId = {}",parentId);
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
return ResponseEntity.ok(categoryList);
} catch (Exception e) {
logger.error("根据父节点id查询节点列表 服务器傲娇了 parentId = {}",parentId,e);
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}

运行项目,显示效果:

您的支持将鼓励我继续创作!